package com.iceclean.util;

/**
 * @author : Ice'Clean
 * @date : 2021-05-01
 *
 * Sql 语句生成类
 */
public class SqlEditor {
    /**
     * 工具类私有化
     */
    private SqlEditor() { }

    /**
     * 生成简单查询语句
     * @param tableName 表名
     * @param condition 条件
     * @param columnName 字段名
     * @return sql 语句
     */
    public static String getQuery(String tableName, String condition, String...columnName){
        StringBuilder querySql = new StringBuilder();

        // 填充查询关键字
        querySql.append("select ");

        // 将字段名填充上
        for(String name : columnName){
            querySql.append(name).append(",");
        }

        // 将最后一个逗号去掉
        querySql.deleteCharAt(querySql.length() - 1);

        // 填充表名
        querySql.append(" from ").append(tableName);

        // 填充条件
        if (condition != null){
            querySql.append(" where ").append(condition);
        }

        return querySql.toString();
    }

    /**
     * 生成简单插入语句
     * @param tableName 表名
     * @param columnName 字段名
     * @return sql 语句
     */
    public static String getInsert(String tableName, Object...columnName){
        StringBuilder insertSql = new StringBuilder();

        // 填充查询关键字
        insertSql.append("insert into ");

        // 填充表名
        insertSql.append(tableName).append("(");

        // 将字段名填充上
        for(Object name : columnName){
            insertSql.append(name).append(",");
        }
        // 将最后一个逗号去掉
        insertSql.deleteCharAt(insertSql.length() - 1);

        // 填充值
        insertSql.append(") values(");
        for (int i = 0; i < columnName.length; i++) {
            insertSql.append("?,");
        }
        // 将最后一个逗号去掉
        insertSql.deleteCharAt(insertSql.length() - 1);
        insertSql.append(")");

        return insertSql.toString();
    }

    /**
     * 生成简单更新语句
     * @param tableName 表名
     * @param condition 更新的条件
     * @param columnName 字段名
     * @return sql 语句
     */
    public static String getUpdate(String tableName, String condition, Object...columnName){
        StringBuilder updateSql = new StringBuilder();

        // 填充更新关键字
        updateSql.append("update ");

        // 填充表名
        updateSql.append(tableName).append(" set ");

        // 将字段名填充上
        for(Object name : columnName){
            updateSql.append(name).append(" =?,");
        }
        // 将最后一个逗号去掉
        updateSql.deleteCharAt(updateSql.length() - 1);

        // 加上条件
        updateSql.append(" where ").append(condition);

        return updateSql.toString();
    }

    /**
     * 生成简单删除语句
     * @param tableName 表名
     * @param condition 删除的条件
     * @return sql 语句
     */
    public static String getDelete(String tableName, String condition){
        return "delete from " + tableName + " where " + condition;
    }
}
